﻿Imports lbGlobalcom
Imports Oracle.DataAccess.Client
Public Class cFacturacion
    Dim ldsMovi As dsConsultaMovimi
    Private lDocFactura As String
    Private lDocRecibo As String
    Private lDsMovimi As dsMovimiento
    Private lDsMovimiPlan As dsMovimiento
    Private lDaEncaPlan As dsMovimientoTableAdapters.MOV_PLANTableAdapter
    Private lDaDetallePlan As dsMovimientoTableAdapters.MOV_PLANDETALLETableAdapter
    Private lDaInventario As dsInventariosTableAdapters.INV_DETALLETableAdapter
    Private iTipoDocFactura As cTipoDocumento
    Private iTipoDocRecibo As cTipoDocumento
    Private iListaP As cDetalleListaPrecios
    Private lIdproducto As String
    Private iConsec As Consec
    Private lDaEncamov As dsMovimientoTableAdapters.MOV_MOVIMIENTOTableAdapter
    Private lDaDetamov As dsMovimientoTableAdapters.MOV_MOVIMIENTODETALLETableAdapter
    Private lDaDesDetMov As dsMovimientoTableAdapters.MOV_DESCRIPCIONDETTableAdapter
    Private drMov As dsMovimiento.MOV_MOVIMIENTORow = Nothing
    Private drDetMov As dsMovimiento.MOV_MOVIMIENTODETALLERow = Nothing
    Private drDetMov2 As dsMovimiento.MOV_MOVIMIENTODETALLERow = Nothing
    Private drDesDet As dsMovimiento.MOV_DESCRIPCIONDETRow = Nothing
    Private lCliente As String
    Private lVendedor As String
    Private lCaja As String
    Private lSucursal As String
    Private lValorRecarga As Decimal
    Private ltipodoc As String
    Private lnumero As String
    Private lTipo As Integer
    Dim iPer As cPeriodos
    Private iCliente As cClientes
    Dim iProducto As cProducto
    Dim iPrep As cPrepack

    'RECIBO
    Dim lDsRecibo As dsCartera
    Dim lDaCaja As dsCarteraTableAdapters.CAR_RECIBOSCAJATableAdapter
    Dim lDaCajaDtalle As dsCarteraTableAdapters.CAR_RECIBOCAJADETALLEPLANTableAdapter
    Private drCaja As dsCartera.CAR_RECIBOSCAJARow = Nothing
    Private drCajaDetalle As dsCartera.CAR_RECIBOCAJADETALLEPLANRow = Nothing
    Private iPlan As cPlanes

    Public Sub New(ByVal dsMov As dsConsultaMovimi, Optional ByVal docFactura As String = "", Optional ByVal docRecibo As String = "")
        ldsMovi = dsMov
        lDsMovimi = New dsMovimiento
        lDsMovimiPlan = New dsMovimiento
        lDsRecibo = New dsCartera
        iTipoDocFactura = New cTipoDocumento(docFactura)
        iTipoDocRecibo = New cTipoDocumento(docRecibo)
        lDaEncaPlan = New dsMovimientoTableAdapters.MOV_PLANTableAdapter
        lDaDetallePlan = New dsMovimientoTableAdapters.MOV_PLANDETALLETableAdapter
        lDaInventario = New dsInventariosTableAdapters.INV_DETALLETableAdapter
        lDaEncamov = New dsMovimientoTableAdapters.MOV_MOVIMIENTOTableAdapter
        lDaDetamov = New dsMovimientoTableAdapters.MOV_MOVIMIENTODETALLETableAdapter
        lDaDesDetMov = New dsMovimientoTableAdapters.MOV_DESCRIPCIONDETTableAdapter
        lDaCaja = New dsCarteraTableAdapters.CAR_RECIBOSCAJATableAdapter
        lDaCajaDtalle = New dsCarteraTableAdapters.CAR_RECIBOCAJADETALLEPLANTableAdapter
    End Sub

    Public Function facturarPlanes(ByVal tipodoc As String, ByVal numero As String) As String
        Dim facturas As String = ""
        Dim recibos As String = ""
        Try
            ltipodoc = tipodoc
            lnumero = numero
            Return generaFactura()
        Catch ex As Exception
            cError.SalvaError(ex, "Henry")
            Throw ex
        End Try
    End Function

    Public Function ReciboPlanes() As String
        Try
            Return generaRecibo()
        Catch ex As Exception
            cError.SalvaError(ex, "Henry")
            Throw ex
        End Try
    End Function

    Public Function generaFactura() As String
        Try
            drMov = Nothing
            drDetMov = Nothing
            drDetMov2 = Nothing
            drDesDet = Nothing
            lDaEncaPlan.FillByIdDocumentoNumero(lDsMovimiPlan.MOV_PLAN, ltipodoc, lnumero)
            lDaDetallePlan.FillByIdDocumentoNumero(lDsMovimiPlan.MOV_PLANDETALLE, ltipodoc, lnumero)
            lDsMovimi.MOV_DESCRIPCIONDET.Rows.Clear()
            lDsMovimi.MOV_MOVIMIENTODETALLE.Rows.Clear()
            lDsMovimi.MOV_MOVIMIENTO.Rows.Clear()
            drMov = lDsMovimi.MOV_MOVIMIENTO.NewMOV_MOVIMIENTORow
            encabezado()
            drDetMov = lDsMovimi.MOV_MOVIMIENTODETALLE.NewMOV_MOVIMIENTODETALLERow
            detalle()
            SalvaCambiosFactura()
            Dim cmov As New cMovimiento(lDsMovimi)
            cmov.cerrarDocumento()
            Dim factura As String = drMov.IDDOCUMENTO + "-" + drMov.NUMERO.ToString
            Return factura
        Catch ex As Exception
            cError.SalvaError(ex, "Henry")
            Throw ex
        End Try
    End Function

    Public Function generaRecibo() As String
        Try
            drCaja = Nothing
            drCajaDetalle = Nothing
            lDsRecibo.CAR_RECIBOCAJADETALLEPLAN.Rows.Clear()
            lDsRecibo.CAR_RECIBOSCAJA.Rows.Clear()
            drCaja = lDsRecibo.CAR_RECIBOSCAJA.NewCAR_RECIBOSCAJARow
            encabezadoRecibo()
            drCajaDetalle = lDsRecibo.CAR_RECIBOCAJADETALLEPLAN.NewCAR_RECIBOCAJADETALLEPLANRow
            detalleRecibo()
            salvaCambiosRecibo()
            Dim Recibo As String = drCaja.IDDOCUMENTO + "-" + drCaja.NUMERO.ToString
            Return Recibo
        Catch ex As Exception
            cError.SalvaError(ex, "Henry")
            Throw ex
        End Try
    End Function
    Private Sub SalvaCambiosFactura()
        Try
            Dim AfecInv As New cAfectaIventarios(lDsMovimi, iTipoDocFactura, iPer, False, iCliente, "N")
            AfecInv.AfectaInventarios()
            AfecInv = Nothing
            lDaEncamov.Update(lDsMovimi.MOV_MOVIMIENTO)
            lDaDetamov.Update(lDsMovimi.MOV_MOVIMIENTODETALLE)
            lDaDesDetMov.Update(lDsMovimi.MOV_DESCRIPCIONDET)
        Catch ex As Exception
            cError.SalvaError(ex, "Henry")
            Throw ex
        End Try
    End Sub

    Private Sub salvaCambiosRecibo()
        Try
            lDaCaja.Update(lDsRecibo.CAR_RECIBOSCAJA)
            lDaCajaDtalle.Update(lDsRecibo.CAR_RECIBOCAJADETALLEPLAN)
        Catch ex As Exception
            cError.SalvaError(ex, "Henry")
            Throw ex
        End Try
    End Sub

    Private Sub encabezado()
        Try
            Dim drMovPlan As dsMovimiento.MOV_PLANRow = lDsMovimiPlan.MOV_PLAN.Rows(0)
            drMov.IDDOCUMENTO = iTipoDocFactura.TipoDoc
            drMov.NUMERO = Consec.GetNumeroActual(iTipoDocFactura.TipoDoc, iTipoDocFactura.DocEs)
            drMov.FECHADOCUMENTO = Date.Now.Date
            drMov.FECHAVENCIMIENTO = Date.Now.Date
            drMov.IDBODEGAORIGEN = drMovPlan.IDBODEGAORIGEN
            drMov.IDLISTA = drMovPlan.IDLISTA
            drMov.IDCCOSTO = drMovPlan.IDCCOSTO
            drMov.IDSEDE = drMovPlan.IDSEDE
            drMov.IDTERCERO = drMovPlan.IDTERCERO
            drMov.SUCURSAL = drMovPlan.SUCURSAL
            iCliente = New cClientes(drMovPlan.IDTERCERO)
            iPer = New cPeriodos()
            drMov.IDVENDEDOR = iCliente.idVendedor
            drMov.IDCAJA = drMovPlan.IDCAJA
            drMov.IDFORMAPAGO = drMovPlan.IDFORMAPAGO
            lDsMovimi.MOV_MOVIMIENTO.Rows.Add(drMov)
        Catch ex As Exception
            cError.SalvaError(ex, "Henry")
            Throw ex
        End Try

    End Sub

    Private Sub encabezadoRecibo()
        Try
            Dim drMovPlan As dsMovimiento.MOV_PLANRow = lDsMovimiPlan.MOV_PLAN.Rows(0)
            drCaja.IDDOCUMENTO = iTipoDocRecibo.TipoDoc
            drCaja.NUMERO = Consec.GetNumeroActual(iTipoDocRecibo.TipoDoc, iTipoDocRecibo.DocEs)
            drCaja.FECHA = Date.Today
            drCaja.IDTERCERO = drMovPlan.IDTERCERO
            drCaja.SUCURSAL = drMovPlan.SUCURSAL
            drCaja.IDCAJA = drMovPlan.IDCAJA
            drCaja.VALORRECIBO = valorRecibo()
            lDsRecibo.CAR_RECIBOSCAJA.AddCAR_RECIBOSCAJARow(drCaja)
        Catch ex As Exception
            cError.SalvaError(ex, "Henry")
            Throw ex
        End Try
    End Sub

    Private Sub detalle()
        Dim numLin As Integer = 0
        Dim numPro As Integer = 0
        Try
            For Each dr As dsConsultaMovimi.DETALLEPLANESRow In ldsMovi.DETALLEPLANES.Rows
                If ltipodoc = dr.IDDOCUMENTO And lnumero = dr.NUMERO And dr.ACTIVADO = True Then
                    iProducto = New cProducto(dr.IDPRODUCTOIMEI)
                    iPrep = New cPrepack(iProducto.TipoSubProd, dr.IMEI, True)
                    If iPrep.EsPrepack Then
                        'If lDsMovimi.MOV_MOVIMIENTODETALLE.Rows.Count > 0 Then
                        '    For Each row As dsMovimiento.MOV_MOVIMIENTODETALLERow In lDsMovimi.MOV_MOVIMIENTODETALLE.Rows
                        '        If row.IDPRODUCTO = iPrep.IdProductoP And row.IDPREPACK = iPrep.IdTipoPrepack Then
                        '            row.CANTIDAD += 1
                        '            numPro = getNumeroProducto(iPrep.IdProductoP, row.NUMEROLINEA) + 1
                        '            descripcionDetalle(iPrep.IdProductoP, iPrep.TipoSubProdP, row.NUMEROLINEA, numPro, iPrep.NumeroRegsitroP)
                        '            GoTo finCiclo1
                        '        End If
                        '    Next
                        'End If
                        numLin += 1
                        drDetMov = lDsMovimi.MOV_MOVIMIENTODETALLE.NewMOV_MOVIMIENTODETALLERow
                        drDetMov.NUMERO = drMov.NUMERO
                        drDetMov.IDDOCUMENTO = drMov.IDDOCUMENTO
                        drDetMov.CANTIDAD = 1
                        drDetMov.IDPREPACK = iPrep.IdTipoPrepack
                        drDetMov.DESCUENTO1 = 0
                        drDetMov.DESCUENTO2 = 0
                        'iListaP = New cDetalleListaPrecios(drMov.IDLISTA, iPrep.IdProductoP)
                        drDetMov.IDPRODUCTO = dr.IDPRODUCTOIMEI
                        drDetMov.NUMEROLINEA = numLin
                        drDetMov.IDIVA = iProducto.IdTipoIva
                        drDetMov.VALORBASE = dr.VALORBASEIMEI
                        drDetMov.VALORIVA = dr.VALORIVAIMEI
                        drDetMov.VALORLINEA = drDetMov.CANTIDAD * (drDetMov.VALORBASE + drDetMov.VALORIVA)
                        lDsMovimi.MOV_MOVIMIENTODETALLE.Rows.Add(drDetMov)
                        descripcionDetalle(iPrep.IdProductoP, iPrep.TipoSubProdP, numLin, 1, iPrep.NumeroRegsitroP)
finCiclo1:

                        'If lDsMovimi.MOV_MOVIMIENTODETALLE.Rows.Count > 0 Then
                        '    For Each row As dsMovimiento.MOV_MOVIMIENTODETALLERow In lDsMovimi.MOV_MOVIMIENTODETALLE.Rows
                        '        If row.IDPRODUCTO = iPrep.IdProductoH And row.IDPREPACK = 0 Then
                        '            row.CANTIDAD += 1
                        '            numPro = getNumeroProducto(iPrep.IdProductoH, row.NUMEROLINEA) + 1
                        '            descripcionDetalle(iPrep.IdProductoH, iPrep.TipoSubProdH, row.NUMEROLINEA, numPro, iPrep.NumeroRegsitroH)
                        '            GoTo finCiclo2
                        '        End If
                        '    Next
                        'End If

                        numLin += 1
                        drDetMov = lDsMovimi.MOV_MOVIMIENTODETALLE.NewMOV_MOVIMIENTODETALLERow
                        drDetMov.NUMERO = drMov.NUMERO
                        drDetMov.IDDOCUMENTO = drMov.IDDOCUMENTO
                        drDetMov.CANTIDAD = 1
                        drDetMov.IDPREPACK = 0
                        drDetMov.DESCUENTO1 = 0
                        drDetMov.DESCUENTO2 = 0
                        'iListaP = New cDetalleListaPrecios(drMov.IDLISTA, iPrep.IdProductoH)
                        drDetMov.IDPRODUCTO = iPrep.IdProductoH
                        drDetMov.NUMEROLINEA = numLin
                        drDetMov.IDIVA = iProducto.IdTipoIva
                        drDetMov.VALORBASE = dr.VALORBASEICCID
                        drDetMov.VALORIVA = dr.VALORIVAICCID
                        drDetMov.VALORLINEA = drDetMov.CANTIDAD * (drDetMov.VALORBASE + drDetMov.VALORIVA)
                        lDsMovimi.MOV_MOVIMIENTODETALLE.Rows.Add(drDetMov)
                        descripcionDetalle(iPrep.IdProductoH, iPrep.TipoSubProdH, numLin, 1, iPrep.NumeroRegsitroH)
                    Else
                        If dr.IMEI <> "" Then
                            'If lDsMovimi.MOV_MOVIMIENTODETALLE.Rows.Count > 0 Then
                            '    For Each row As dsMovimiento.MOV_MOVIMIENTODETALLERow In lDsMovimi.MOV_MOVIMIENTODETALLE.Rows
                            '        If row.IDPRODUCTO = dr.IDPRODUCTOIMEI And row.IDPREPACK = 0 Then
                            '            row.CANTIDAD += 1
                            '            iProducto = New cProducto(dr.IDPRODUCTOIMEI)
                            '            numPro += getNumeroProducto(dr.IDPRODUCTOIMEI, row.NUMEROLINEA)
                            '            descripcionDetalle(dr.IDPRODUCTOIMEI, iProducto.TipoSubProd, row.NUMEROLINEA, numPro, dr.IMEI)
                            '            GoTo finCiclo3
                            '        End If
                            '    Next
                            'End If
                            numLin += 1
                            drDetMov = lDsMovimi.MOV_MOVIMIENTODETALLE.NewMOV_MOVIMIENTODETALLERow
                            drDetMov.NUMERO = drMov.NUMERO
                            drDetMov.IDDOCUMENTO = drMov.IDDOCUMENTO
                            drDetMov.CANTIDAD = 1
                            drDetMov.IDPREPACK = 0
                            drDetMov.DESCUENTO1 = 0
                            drDetMov.DESCUENTO2 = 0
                            'iListaP = New cDetalleListaPrecios(drMov.IDLISTA, dr.IDPRODUCTOIMEI)
                            drDetMov.IDPRODUCTO = dr.IDPRODUCTOIMEI
                            drDetMov.NUMEROLINEA = numLin
                            drDetMov.IDIVA = iProducto.IdTipoIva
                            drDetMov.VALORBASE = iListaP.PrecioConDto
                            drDetMov.VALORIVA = iListaP.Iva
                            drDetMov.VALORLINEA = drDetMov.CANTIDAD * (drDetMov.VALORBASE + drDetMov.VALORIVA)
                            lDsMovimi.MOV_MOVIMIENTODETALLE.Rows.Add(drDetMov)
                            descripcionDetalle(iProducto.idProducto, iProducto.TipoSubProd, numLin, 1, dr.IMEI)
                        End If
finCiclo3:
                        If dr.ICCID IsNot DBNull.Value Then
                            'Dim drInven As dsInventarios.INV_DETALLERow = lDaInventario.GetDataByDatosImeiIccid(dr.ICCID).Rows(0)
                            'If lDsMovimi.MOV_MOVIMIENTODETALLE.Rows.Count > 0 Then
                            '    For Each row As dsMovimiento.MOV_MOVIMIENTODETALLERow In lDsMovimi.MOV_MOVIMIENTODETALLE.Rows
                            '        If row.IDPRODUCTO = drInven.IDPRODUCTO And row.IDPREPACK = 0 Then
                            '            row.CANTIDAD += 1
                            '            numPro += getNumeroProducto(drInven.IDPRODUCTO, row.NUMEROLINEA)
                            '            descripcionDetalle(drInven.IDPRODUCTO, drInven.TIPOSUBPROD, row.NUMEROLINEA, numPro, dr.ICCID)
                            '            GoTo finCiclo3
                            '        End If
                            '    Next
                            'End If
                            numLin += 1
                            drDetMov2 = lDsMovimi.MOV_MOVIMIENTODETALLE.NewMOV_MOVIMIENTODETALLERow
                            drDetMov2.NUMERO = drMov.NUMERO
                            drDetMov2.IDDOCUMENTO = drMov.IDDOCUMENTO
                            drDetMov2.CANTIDAD = 1
                            drDetMov2.IDPREPACK = 0
                            drDetMov2.DESCUENTO1 = 0
                            drDetMov2.DESCUENTO2 = 0
                            'iListaP = New cDetalleListaPrecios(drMov.IDLISTA, drInven.IDPRODUCTO)
                            drDetMov2.IDPRODUCTO = dr.IDPRODUCTOICCID
                            drDetMov2.NUMEROLINEA = numLin
                            drDetMov2.IDIVA = iProducto.IdTipoIva
                            drDetMov2.VALORBASE = dr.VALORBASEICCID
                            drDetMov2.VALORIVA = dr.VALORIVAICCID
                            drDetMov2.VALORLINEA = drDetMov2.CANTIDAD * (drDetMov2.VALORBASE + drDetMov2.VALORIVA)
                            lDsMovimi.MOV_MOVIMIENTODETALLE.Rows.Add(drDetMov2)
                            descripcionDetalle(iProducto.idProducto, iProducto.TipoSubProd, numLin, 1, dr.ICCID)
                        End If
                    End If
                End If
finCiclo2:
            Next
            'lLista.Add(drMov.NUMERO & " - " & recarga)
        Catch ex As Exception
            cError.SalvaError(ex, "Henry")
        End Try
    End Sub

    Private Function valorRecibo() As Decimal
        Dim valorTotal As Decimal = 0
        Try
            For Each dr As dsConsultaMovimi.DETALLEPLANESRow In ldsMovi.DETALLEPLANES.Rows
                If ltipodoc = dr.IDDOCUMENTO And lnumero = dr.NUMERO And dr.ACTIVADO = True Then
                    valorTotal += dr.VALORPLAN
                End If
            Next
            Return valorTotal
        Catch ex As Exception
            cError.SalvaError(ex, "Henry")
        End Try
    End Function

    Private Sub detalleRecibo()
        Dim linea As Integer = 1
        Try
            For Each dr As dsConsultaMovimi.DETALLEPLANESRow In ldsMovi.DETALLEPLANES.Rows
                If ltipodoc = dr.IDDOCUMENTO And lnumero = dr.NUMERO And dr.ACTIVADO = True Then
                    drCajaDetalle = lDsRecibo.CAR_RECIBOCAJADETALLEPLAN.NewCAR_RECIBOCAJADETALLEPLANRow
                    drCajaDetalle.IDDOCUMENTO = drCaja.IDDOCUMENTO
                    drCajaDetalle.NUMERO = drCaja.NUMERO
                    drCajaDetalle.NITEM = linea
                    drCajaDetalle.IDPLAN = dr.IDPLAN
                    drCajaDetalle.VALORPLAN = dr.VALORPLAN
                    drCajaDetalle.IMEI = dr.IMEI
                    drCajaDetalle.ICCID = dr.ICCID
                    drCajaDetalle.MIN = dr.MIND
                    'drCajaDetalle.MIN = dr.
                    lDsRecibo.CAR_RECIBOCAJADETALLEPLAN.AddCAR_RECIBOCAJADETALLEPLANRow(drCajaDetalle)
                    linea += 1
                End If
            Next
        Catch ex As Exception
            cError.SalvaError(ex, "Henry")
        End Try
    End Sub

    Private Sub descripcionDetalle(ByVal producto As String, ByVal tiposubprod As Short, ByVal numeroLinea As Decimal, ByVal numPro As Decimal, ByVal numReg As String)
        Try
            drDesDet = lDsMovimi.MOV_DESCRIPCIONDET.NewMOV_DESCRIPCIONDETRow
            drDesDet.NUMERO = drMov.NUMERO
            drDesDet.IDDOCUMENTO = drMov.IDDOCUMENTO
            drDesDet.NUMEROLINEA = numeroLinea
            drDesDet.IDPRODUCTO = producto
            'iProducto = New cProducto(producto)
            drDesDet.NUMEROPRODUCTO = numPro
            drDesDet.NUMEROREGISTRO = numReg
            drDesDet.TIPOSUBPROD = tiposubprod
            lDsMovimi.MOV_DESCRIPCIONDET.Rows.Add(drDesDet)
        Catch ex As Exception
            cError.SalvaError(ex, "Henry")
        End Try
    End Sub

    Private Function getNumeroProducto(ByVal producto As String, ByVal numLin As Decimal) As Integer
        Dim numPro As Integer = 0
        Try
            For Each dr As dsMovimiento.MOV_DESCRIPCIONDETRow In lDsMovimi.MOV_DESCRIPCIONDET.Rows
                If dr.IDPRODUCTO = producto And dr.NUMEROLINEA = numLin Then
                    numPro += 1
                End If
            Next
            Return numPro
        Catch ex As Exception
            cError.SalvaError(ex, "Henry")
        End Try
    End Function
    Public Sub modificarEstadoPlanes()
        Dim conn As OracleConnection = New OracleConnection(My.Settings.ConnectionString)
        Dim cmd As OracleCommand
        Try
            For Each row As dsConsultaMovimi.DETALLEPLANESRow In ldsMovi.DETALLEPLANES.Rows
                If row.ACTIVADO = True Then
                    cmd = conn.CreateCommand
                    cmd.CommandText = "UPDATE MOV_PLANDETALLE SET ACTIVO='F'" & _
                                      " WHERE IDDOCUMENTO=:PDOCUMENTO AND NUMERO=:PNUMERO AND NUMEROLINEA=:PNUMEROLINEA"
                    cmd.Parameters.Add("PDOCUMENTO", OracleDbType.Varchar2).Value = row.IDDOCUMENTO
                    cmd.Parameters.Add("PNUMERO", OracleDbType.Decimal).Value = row.NUMERO
                    cmd.Parameters.Add("PNUMEROLINEA", OracleDbType.Int32).Value = row.NUMEROLINEA
                    conn.Open()
                    cmd.ExecuteNonQuery()
                    conn.Close()
                End If
            Next


        Catch ex As Exception
            cError.SalvaError(ex, "Henry")
        End Try
    End Sub

    Public Shared Function equipoPendientePorFacturar(ByVal imei As String) As Integer
        Dim conn As OracleConnection = New OracleConnection(My.Settings.ConnectionString)
        Dim cmd As OracleCommand
        Try
            cmd = conn.CreateCommand
            cmd.CommandText = "SELECT COUNT(*) FROM MOV_PLANDETALLE WHERE IMEI=:PIMEI AND ACTIVO='A'"
            cmd.Parameters.Add("PIMEI", OracleDbType.Varchar2).Value = imei
            conn.Open()
            Return cmd.ExecuteScalar()
        Catch ex As Exception
            cError.SalvaError(ex, "Henry")
        Finally
            conn.Close()
        End Try
    End Function

End Class
